package com.liujit.common.utils;

import com.github.dozermapper.core.DozerBeanMapperBuilder;
import com.github.dozermapper.core.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

/**
 * @author: liujun
 * @date: 2021/6/22 11:29 上午
 * @description: dozer 转换器
 */
@Component
public class DozerConvertor {

    private static Mapper mapper;

    /**
     * List  实体类 转换器
     *
     * @param source 原数据
     * @param clz    转换类型
     * @return
     * @author: liujun
     * @date: 2021/6/22 11:34 上午
     */
    public static <T, S> List<T> convertor(List<S> source, Class<T> clz) {
        if (source == null) {
            return null;
        }
        List<T> map = new ArrayList<>();
        for (S s : source) {
            map.add(mapper.map(s, clz));
        }
        return map;
    }

    /**
     * Set 实体类 深度转换器
     *
     * @param source 原数据
     * @param clz    目标对象
     * @return
     * @author: liujun
     * @date: 2021/6/22 11:35 上午
     */
    public static <T, S> Set<T> convertor(Set<S> source, Class<T> clz) {
        if (source == null) {
            return null;
        }
        Set<T> set = new TreeSet<>();
        for (S s : source) {
            set.add(mapper.map(s, clz));
        }
        return set;
    }

    /**
     * 实体类 深度转换器
     *
     * @param source 原数据
     * @param clz    目标对象
     * @return
     * @author: liujun
     * @date: 2021/6/22 11:37 上午
     */
    public static <T, S> T convertor(S source, Class<T> clz) {
        if (source == null) {
            return null;
        }
        return mapper.map(source, clz);
    }

    /**
     * 实体类 深度转换器
     *
     * @param source 原数据
     * @param object 目标对象
     * @return
     * @author: liujun
     * @date: 2021/6/22 11:38 上午
     */
    public static void convertor(Object source, Object object) {
        mapper.map(source, object);
    }

    @Autowired
    public void DozerConvertor() {
        DozerConvertor.mapper = DozerBeanMapperBuilder.buildDefault();
    }
}
